{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Clustering time series for classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['figure.figsize'] = [15, 10]\n",
    "\n",
    "from math import sqrt\n",
    "\n",
    "from datetime import datetime\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import pdb\n",
    "\n",
    "\n",
    "from scipy.cluster.hierarchy import dendrogram, linkage\n",
    "from scipy.spatial.distance import squareform\n",
    "\n",
    "from sklearn.metrics.pairwise import pairwise_distances\n",
    "from sklearn import preprocessing\n",
    "from sklearn.cluster import AgglomerativeClustering\n",
    "from sklearn.metrics.cluster import homogeneity_score, completeness_score\n",
    "from sklearn.metrics.cluster import contingency_matrix\n",
    "from sklearn.metrics.cluster import homogeneity_score\n",
    "\n",
    "from dtaidistance import dtw\n",
    "\n",
    "from collections import Counter\n",
    "\n",
    "from scipy.stats import pearsonr"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "ename": "URLError",
     "evalue": "<urlopen error [Errno -2] Name or service not known>",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mgaierror\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m~/anaconda3/lib/python3.6/urllib/request.py\u001b[0m in \u001b[0;36mdo_open\u001b[0;34m(self, http_class, req, **http_conn_args)\u001b[0m\n\u001b[1;32m   1317\u001b[0m                 h.request(req.get_method(), req.selector, req.data, headers,\n\u001b[0;32m-> 1318\u001b[0;31m                           encode_chunked=req.has_header('Transfer-encoding'))\n\u001b[0m\u001b[1;32m   1319\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mOSError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# timeout error\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36mrequest\u001b[0;34m(self, method, url, body, headers, encode_chunked)\u001b[0m\n\u001b[1;32m   1238\u001b[0m         \u001b[0;34m\"\"\"Send a complete request to the server.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1239\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_send_request\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbody\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheaders\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencode_chunked\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1240\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36m_send_request\u001b[0;34m(self, method, url, body, headers, encode_chunked)\u001b[0m\n\u001b[1;32m   1284\u001b[0m             \u001b[0mbody\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_encode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbody\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'body'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1285\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mendheaders\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbody\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencode_chunked\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mencode_chunked\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1286\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36mendheaders\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m   1233\u001b[0m             \u001b[0;32mraise\u001b[0m \u001b[0mCannotSendHeader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1234\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_send_output\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmessage_body\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mencode_chunked\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mencode_chunked\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1235\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36m_send_output\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m   1025\u001b[0m         \u001b[0;32mdel\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_buffer\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1026\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1027\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36msend\u001b[0;34m(self, data)\u001b[0m\n\u001b[1;32m    963\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mauto_open\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 964\u001b[0;31m                 \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    965\u001b[0m             \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m   1391\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1392\u001b[0;31m             \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1393\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/http/client.py\u001b[0m in \u001b[0;36mconnect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    935\u001b[0m         self.sock = self._create_connection(\n\u001b[0;32m--> 936\u001b[0;31m             (self.host,self.port), self.timeout, self.source_address)\n\u001b[0m\u001b[1;32m    937\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msock\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetsockopt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msocket\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mIPPROTO_TCP\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msocket\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTCP_NODELAY\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/socket.py\u001b[0m in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address)\u001b[0m\n\u001b[1;32m    703\u001b[0m     \u001b[0merr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 704\u001b[0;31m     \u001b[0;32mfor\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mgetaddrinfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhost\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mport\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSOCK_STREAM\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    705\u001b[0m         \u001b[0maf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msocktype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproto\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcanonname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msa\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/socket.py\u001b[0m in \u001b[0;36mgetaddrinfo\u001b[0;34m(host, port, family, type, proto, flags)\u001b[0m\n\u001b[1;32m    744\u001b[0m     \u001b[0maddrlist\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 745\u001b[0;31m     \u001b[0;32mfor\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32min\u001b[0m \u001b[0m_socket\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetaddrinfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhost\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mport\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfamily\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproto\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mflags\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    746\u001b[0m         \u001b[0maf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msocktype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mproto\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcanonname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msa\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mgaierror\u001b[0m: [Errno -2] Name or service not known",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[0;31mURLError\u001b[0m                                  Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-7-08d11bb657e2>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m words = pd.read_csv('https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/50words_TEST.csv',\n\u001b[0;32m----> 2\u001b[0;31m                    header = None)\n\u001b[0m",
      "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36mparser_f\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)\u001b[0m\n\u001b[1;32m    700\u001b[0m                     skip_blank_lines=skip_blank_lines)\n\u001b[1;32m    701\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 702\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    703\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    704\u001b[0m     \u001b[0mparser_f\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/io/parsers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m    411\u001b[0m     \u001b[0mcompression\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_infer_compression\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcompression\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    412\u001b[0m     filepath_or_buffer, _, compression, should_close = get_filepath_or_buffer(\n\u001b[0;32m--> 413\u001b[0;31m         filepath_or_buffer, encoding, compression)\n\u001b[0m\u001b[1;32m    414\u001b[0m     \u001b[0mkwds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'compression'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcompression\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    415\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/.local/lib/python3.6/site-packages/pandas/io/common.py\u001b[0m in \u001b[0;36mget_filepath_or_buffer\u001b[0;34m(filepath_or_buffer, encoding, compression, mode)\u001b[0m\n\u001b[1;32m    200\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    201\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0m_is_url\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 202\u001b[0;31m         \u001b[0mreq\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_urlopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    203\u001b[0m         \u001b[0mcontent_encoding\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mheaders\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Content-Encoding'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    204\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mcontent_encoding\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'gzip'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/urllib/request.py\u001b[0m in \u001b[0;36murlopen\u001b[0;34m(url, data, timeout, cafile, capath, cadefault, context)\u001b[0m\n\u001b[1;32m    221\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    222\u001b[0m         \u001b[0mopener\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_opener\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 223\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mopener\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0murl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    224\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    225\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0minstall_opener\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mopener\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/urllib/request.py\u001b[0m in \u001b[0;36mopen\u001b[0;34m(self, fullurl, data, timeout)\u001b[0m\n\u001b[1;32m    524\u001b[0m             \u001b[0mreq\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmeth\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreq\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    525\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 526\u001b[0;31m         \u001b[0mresponse\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_open\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreq\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    527\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    528\u001b[0m         \u001b[0;31m# post-process response\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/urllib/request.py\u001b[0m in \u001b[0;36m_open\u001b[0;34m(self, req, data)\u001b[0m\n\u001b[1;32m    542\u001b[0m         \u001b[0mprotocol\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    543\u001b[0m         result = self._call_chain(self.handle_open, protocol, protocol +\n\u001b[0;32m--> 544\u001b[0;31m                                   '_open', req)\n\u001b[0m\u001b[1;32m    545\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    546\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/urllib/request.py\u001b[0m in \u001b[0;36m_call_chain\u001b[0;34m(self, chain, kind, meth_name, *args)\u001b[0m\n\u001b[1;32m    502\u001b[0m         \u001b[0;32mfor\u001b[0m \u001b[0mhandler\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mhandlers\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    503\u001b[0m             \u001b[0mfunc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmeth_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 504\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    505\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    506\u001b[0m                 \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/urllib/request.py\u001b[0m in \u001b[0;36mhttps_open\u001b[0;34m(self, req)\u001b[0m\n\u001b[1;32m   1359\u001b[0m         \u001b[0;32mdef\u001b[0m \u001b[0mhttps_open\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreq\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1360\u001b[0m             return self.do_open(http.client.HTTPSConnection, req,\n\u001b[0;32m-> 1361\u001b[0;31m                 context=self._context, check_hostname=self._check_hostname)\n\u001b[0m\u001b[1;32m   1362\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1363\u001b[0m         \u001b[0mhttps_request\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mAbstractHTTPHandler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdo_request_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m~/anaconda3/lib/python3.6/urllib/request.py\u001b[0m in \u001b[0;36mdo_open\u001b[0;34m(self, http_class, req, **http_conn_args)\u001b[0m\n\u001b[1;32m   1318\u001b[0m                           encode_chunked=req.has_header('Transfer-encoding'))\n\u001b[1;32m   1319\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mOSError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merr\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# timeout error\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1320\u001b[0;31m                 \u001b[0;32mraise\u001b[0m \u001b[0mURLError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1321\u001b[0m             \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mh\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetresponse\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1322\u001b[0m         \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mURLError\u001b[0m: <urlopen error [Errno -2] Name or service not known>"
     ]
    }
   ],
   "source": [
    "words = pd.read_csv('https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/50words_TEST.csv',\n",
    "                   header = None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "words.rename(columns = {0:'word'}, inplace = True) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'words' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-3-2498781d967b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mwords\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'words' is not defined"
     ]
    }
   ],
   "source": [
    "words.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## View output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "12"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "words.word[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5,0.98,'Sample word projections and histograms of the projections')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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bNgwl9dq3759VFZWAuDv709DQwN2ux2lFCkpKQQGBrY7X5vNRkNDAyKCl5cX48aNc3tNT548SUFBAQBpaWn4+fmxc+dO/Pz8CAwMpKyszCpn586d2O12S/Zx48a1ks8ZpRQJCQkcPnzYZbkYD8GDGC9uh1WnHOOF6eeULwc4LSLTzfr6KYYlpMLc19vM909gPsaX6Eyn/fcDsWa+IC8vLyZOnNjqHjvXYR8fH8aMGcOXX35JY2Mjvr6+AC7rtnN99PLywtfX16pLjvrh6+tLQ4PxUTts2DCio11PE2W328nJybHKcewvIvj4+JCamkptba3L+hMfH09YWFi7YzrXi9GjRxMSEoLdbmfPnj00Njbi7e3NhAkTqKystNqEUspqF9HR0YSEhLB3717sdjteXl6tngdBQUGMGTMGpVS323lVVRX79u0zXhxme2lqasLf39+qP9XV1QD4+vpa5zxy5EgKCgo4efKkVRcBK81xP5uammhubgZg1KhRhIWFtTtfX19fmpqarLo9duxY/P39Xd6nqqoqcnNzWx1v165d2O12oqOjOX78OMA3ReQ/Sql9GFaof4nIt83y/oLxXAajyykcw8Jix/h4+LjNc7kBQ2kpwfj4WY2pUGBYvAoxpkwIMvPfLiKvu5JdKZWFofx9AWSIiF0p9QZGuwEYLiJuG+yApa81onN5ofVXmWPJBX4NBDrlG+PYBt7G6Jt25L/TTJ/jlPaKmfaYI+2xxx4TEZGbb75ZAImNjRUHs2fPFkB8fHwkJydHRESefvppS6ZVq1a1yjd79mwREVm7dq2VZ/ny5SIiUl5eLoMGDWpVpisefvhha98JEybIlClTJDQ01Er74x//KCIir732mpU2f/58aW5uFhGRpqYmyczMFEASEhKkrKxMREQeeOABK/+uXbtERGT48OECyG233SYiIkuWLLHOd8+ePSIiUlBQIN7e3gLI3//+dxERGTFihACSmJgox44dExGRxsZG67j5+flWWa+99lqr82t7rVatWmXlffLJJ0VEpKioSMLDwwWQb3zjG+3Od+HChSIi8t5771lpH3/8sdtrevjwYSvfiy++KCtXrhRA7rnnHnnppZcEkKeeeko2bdrk0nLhagkICBBAZs2a1e6/sLAwx/otGA/Vteb2MSDMrINVTvvMcarTjryHMbotnmtz/KNttv9q7heHoeyI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\n",
      "text/plain": [
       "<Figure size 432x288 with 6 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.subplot(3, 2, 1)\n",
    "plt.plot(words.iloc[1, 1:-1])\n",
    "plt.title(\"Sample Projection Word \" + str(words.word[1]), fontweight = 'bold', y = 0.8, fontsize = 14)\n",
    "plt.subplot(3, 2, 2)\n",
    "plt.hist(words.iloc[1, 1:-1], 10)\n",
    "plt.title(\"Histogram of Projection Word \" + str(words.word[1]), fontweight = 'bold', y = 0.8, fontsize = 14)\n",
    "plt.subplot(3, 2, 3)\n",
    "plt.plot(words.iloc[3, 1:-1])\n",
    "plt.title(\"Sample Projection Word \" + str(words.word[3]), fontweight = 'bold', y = 0.8, fontsize = 14)\n",
    "plt.subplot(3, 2, 4)\n",
    "plt.hist(words.iloc[3, 1:-1], 10)\n",
    "plt.title(\"Histogram of Projection Word \" + str(words.word[3]), fontweight = 'bold', y = 0.8, fontsize = 14)\n",
    "plt.subplot(3, 2, 5)\n",
    "plt.plot(words.iloc[5, 1:-1])\n",
    "plt.title(\"Sample Projection Word \" + str(words.word[11]), fontweight = 'bold', y = 0.8, fontsize = 14)\n",
    "plt.subplot(3, 2, 6)\n",
    "plt.hist(words.iloc[5, 1:-1], 10)\n",
    "plt.title(\"Histogram of Projection Word \" + str(words.word[11]), fontweight = 'bold', y = 0.8, fontsize = 14)\n",
    "plt.suptitle(\"Sample word projections and histograms of the projections\", fontsize = 18)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Value')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "## We can also consider the 2d histogram of a word\n",
    "x = np.array([])\n",
    "y = np.array([])\n",
    "\n",
    "w = 23\n",
    "selected_words = words[words.word == w]\n",
    "selected_words.shape\n",
    "\n",
    "for idx, row in selected_words.iterrows():\n",
    "    y = np.hstack([y, row[1:271]])\n",
    "    x = np.hstack([x, np.array(range(270))])\n",
    "    \n",
    "fig, ax = plt.subplots()\n",
    "hist = ax.hist2d(x, y, bins = 50)\n",
    "plt.xlabel(\"Time\", fontsize = 18)\n",
    "plt.ylabel(\"Value\", fontsize = 18)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Generate some features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(455, 271)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "words.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "words_features = words.iloc[:, 1:271]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create some features from original time series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "times  = []\n",
    "values = []\n",
    "for idx, row in words_features.iterrows():\n",
    "    values.append(row.values)\n",
    "    times.append(np.array([i for i in range(row.values.shape[0])]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "455"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# from cesium import featurize\n",
    "# features_to_use = [\"amplitude\",\n",
    "#                    \"percent_beyond_1_std\",\n",
    "#                    \"percent_close_to_median\",\n",
    "#                    ]\n",
    "# featurized_words = featurize.featurize_time_series(times=times,\n",
    "#                                               values=values,\n",
    "#                                               errors=None,\n",
    "#                                               features_to_use=features_to_use,\n",
    "#                                               scheduler = None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "featurized_words = pd.read_csv(\"data/featurized_words.csv\", header = [0, 1])\n",
    "featurized_words.columns = featurized_words.columns.droplevel(-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>amplitude</th>\n",
       "      <th>percent_beyond_1_std</th>\n",
       "      <th>percent_close_to_median</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1.674555</td>\n",
       "      <td>0.188889</td>\n",
       "      <td>0.451852</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1.990520</td>\n",
       "      <td>0.118519</td>\n",
       "      <td>0.259259</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2.903650</td>\n",
       "      <td>0.114815</td>\n",
       "      <td>0.637037</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2.515050</td>\n",
       "      <td>0.211111</td>\n",
       "      <td>0.562963</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1.966150</td>\n",
       "      <td>0.181481</td>\n",
       "      <td>0.533333</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   feature  amplitude  percent_beyond_1_std  percent_close_to_median\n",
       "0        0   1.674555              0.188889                 0.451852\n",
       "1        1   1.990520              0.118519                 0.259259\n",
       "2        2   2.903650              0.114815                 0.637037\n",
       "3        3   2.515050              0.211111                 0.562963\n",
       "4        4   1.966150              0.181481                 0.533333"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "featurized_words.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(455, 4)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "featurized_words.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([ 48., 146., 100.,  45.,  41.,  29.,  23.,  12.,   8.,   3.]),\n",
       " array([0.05925926, 0.10666667, 0.15407407, 0.20148148, 0.24888889,\n",
       "        0.2962963 , 0.3437037 , 0.39111111, 0.43851852, 0.48592593,\n",
       "        0.53333333]),\n",
       " <a list of 10 Patch objects>)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hist(featurized_words.percent_beyond_1_std)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create some features from histogram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# times = []\n",
    "# values = []\n",
    "# for idx, row in words_features.iterrows():\n",
    "#     values.append(np.histogram(row.values, bins=10, range=(-2.5, 5.0))[0] + .0001) ## cesium seems not to handle 0s\n",
    "#     times.append(np.array([i for i in range(9)]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# features_to_use = [\"amplitude\",\n",
    "#                    \"percent_close_to_median\",\n",
    "#                   \"skew\"\n",
    "#                   ]\n",
    "# featurized_hists = featurize.featurize_time_series(times=times,\n",
    "#                                               values=values,\n",
    "#                                               errors=None,\n",
    "#                                               features_to_use=features_to_use,\n",
    "#                                               scheduler = None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# featurized_hists.to_csv(\"data/featurized_hists.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "featurized_hists = pd.read_csv(\"data/featurized_hists.csv\", header = [0, 1])\n",
    "featurized_hists.columns = featurized_hists.columns.droplevel(-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>amplitude</th>\n",
       "      <th>percent_close_to_median</th>\n",
       "      <th>skew</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>0.444444</td>\n",
       "      <td>2.262655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>61.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.285343</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>70.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.683031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>67.0</td>\n",
       "      <td>0.555556</td>\n",
       "      <td>1.724109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>75.0</td>\n",
       "      <td>0.777778</td>\n",
       "      <td>1.902513</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   feature  amplitude  percent_close_to_median      skew\n",
       "0        0       88.0                 0.444444  2.262655\n",
       "1        1       61.0                 0.666667  1.285343\n",
       "2        2       70.0                 0.666667  1.683031\n",
       "3        3       67.0                 0.555556  1.724109\n",
       "4        4       75.0                 0.777778  1.902513"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "featurized_hists.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "features = pd.concat([featurized_words.reset_index(drop=True), featurized_hists], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>amplitude</th>\n",
       "      <th>percent_beyond_1_std</th>\n",
       "      <th>percent_close_to_median</th>\n",
       "      <th>feature</th>\n",
       "      <th>amplitude</th>\n",
       "      <th>percent_close_to_median</th>\n",
       "      <th>skew</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1.674555</td>\n",
       "      <td>0.188889</td>\n",
       "      <td>0.451852</td>\n",
       "      <td>0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>0.444444</td>\n",
       "      <td>2.262655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1.990520</td>\n",
       "      <td>0.118519</td>\n",
       "      <td>0.259259</td>\n",
       "      <td>1</td>\n",
       "      <td>61.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.285343</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2.903650</td>\n",
       "      <td>0.114815</td>\n",
       "      <td>0.637037</td>\n",
       "      <td>2</td>\n",
       "      <td>70.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.683031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2.515050</td>\n",
       "      <td>0.211111</td>\n",
       "      <td>0.562963</td>\n",
       "      <td>3</td>\n",
       "      <td>67.0</td>\n",
       "      <td>0.555556</td>\n",
       "      <td>1.724109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1.966150</td>\n",
       "      <td>0.181481</td>\n",
       "      <td>0.533333</td>\n",
       "      <td>4</td>\n",
       "      <td>75.0</td>\n",
       "      <td>0.777778</td>\n",
       "      <td>1.902513</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   feature  amplitude  percent_beyond_1_std  percent_close_to_median  feature  \\\n",
       "0        0   1.674555              0.188889                 0.451852        0   \n",
       "1        1   1.990520              0.118519                 0.259259        1   \n",
       "2        2   2.903650              0.114815                 0.637037        2   \n",
       "3        3   2.515050              0.211111                 0.562963        3   \n",
       "4        4   1.966150              0.181481                 0.533333        4   \n",
       "\n",
       "   amplitude  percent_close_to_median      skew  \n",
       "0       88.0                 0.444444  2.262655  \n",
       "1       61.0                 0.666667  1.285343  \n",
       "2       70.0                 0.666667  1.683031  \n",
       "3       67.0                 0.555556  1.724109  \n",
       "4       75.0                 0.777778  1.902513  "
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "features.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(455, 271)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "words.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "## we also add some of our own features again, to account more for shape\n",
    "feats = np.zeros( (words.shape[0], 1), dtype = np.float32)\n",
    "for i in range(words.shape[0]):\n",
    "    vals = words.iloc[i, 1:271].values\n",
    "    feats[i, 0] = np.where(vals == np.max(vals))[0][0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(455, 1)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feats.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(455, 8)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "features.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "features['peak_location'] = feats"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>amplitude</th>\n",
       "      <th>percent_beyond_1_std</th>\n",
       "      <th>percent_close_to_median</th>\n",
       "      <th>feature</th>\n",
       "      <th>amplitude</th>\n",
       "      <th>percent_close_to_median</th>\n",
       "      <th>skew</th>\n",
       "      <th>peak_location</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1.674555</td>\n",
       "      <td>0.188889</td>\n",
       "      <td>0.451852</td>\n",
       "      <td>0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>0.444444</td>\n",
       "      <td>2.262655</td>\n",
       "      <td>186.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1.990520</td>\n",
       "      <td>0.118519</td>\n",
       "      <td>0.259259</td>\n",
       "      <td>1</td>\n",
       "      <td>61.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.285343</td>\n",
       "      <td>93.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>2.903650</td>\n",
       "      <td>0.114815</td>\n",
       "      <td>0.637037</td>\n",
       "      <td>2</td>\n",
       "      <td>70.0</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.683031</td>\n",
       "      <td>69.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>2.515050</td>\n",
       "      <td>0.211111</td>\n",
       "      <td>0.562963</td>\n",
       "      <td>3</td>\n",
       "      <td>67.0</td>\n",
       "      <td>0.555556</td>\n",
       "      <td>1.724109</td>\n",
       "      <td>235.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1.966150</td>\n",
       "      <td>0.181481</td>\n",
       "      <td>0.533333</td>\n",
       "      <td>4</td>\n",
       "      <td>75.0</td>\n",
       "      <td>0.777778</td>\n",
       "      <td>1.902513</td>\n",
       "      <td>174.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   feature  amplitude  percent_beyond_1_std  percent_close_to_median  feature  \\\n",
       "0        0   1.674555              0.188889                 0.451852        0   \n",
       "1        1   1.990520              0.118519                 0.259259        1   \n",
       "2        2   2.903650              0.114815                 0.637037        2   \n",
       "3        3   2.515050              0.211111                 0.562963        3   \n",
       "4        4   1.966150              0.181481                 0.533333        4   \n",
       "\n",
       "   amplitude  percent_close_to_median      skew  peak_location  \n",
       "0       88.0                 0.444444  2.262655          186.0  \n",
       "1       61.0                 0.666667  1.285343           93.0  \n",
       "2       70.0                 0.666667  1.683031           69.0  \n",
       "3       67.0                 0.555556  1.724109          235.0  \n",
       "4       75.0                 0.777778  1.902513          174.0  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "features.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "feature_values = preprocessing.scale(features.iloc[:, [1, 2, 3, 5, 6, 7]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "clustering = AgglomerativeClustering(n_clusters=50, linkage='ward')\n",
    "clustering.fit(feature_values)\n",
    "words['feature_label'] = clustering.labels_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "words['feature_label'] = words.feature_label.astype('category')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/aileen/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:4: FutureWarning: using a dict on a Series for aggregation\n",
      "is deprecated and will be removed in a future version\n",
      "  after removing the cwd from sys.path.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>num_clustering_labels</th>\n",
       "      <th>num_word_samples</th>\n",
       "      <th>most_common_label</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>word</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>19</td>\n",
       "      <td>57</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>19</td>\n",
       "      <td>42</td>\n",
       "      <td>29</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16</td>\n",
       "      <td>28</td>\n",
       "      <td>37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>17</td>\n",
       "      <td>34</td>\n",
       "      <td>17</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>13</td>\n",
       "      <td>25</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      num_clustering_labels  num_word_samples  most_common_label\n",
       "word                                                            \n",
       "1                        19                57                 38\n",
       "2                        19                42                 29\n",
       "3                        16                28                 37\n",
       "4                        17                34                 17\n",
       "5                        13                25                  8"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## the number of feature labels \n",
    "results = words.groupby('word')['feature_label'].agg({'num_clustering_labels': lambda x: len(set(x)),\n",
    "                                            'num_word_samples':      lambda x: len(x),\n",
    "                                            'most_common_label':     lambda x: Counter(x).most_common(1)[0][0]})\n",
    "results.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/aileen/anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:4: FutureWarning: using a dict on a Series for aggregation\n",
      "is deprecated and will be removed in a future version\n",
      "  after removing the cwd from sys.path.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>num_words</th>\n",
       "      <th>num_feat_samples</th>\n",
       "      <th>most_common_word</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>feature_label</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>9</td>\n",
       "      <td>16</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>5</td>\n",
       "      <td>5</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>6</td>\n",
       "      <td>17</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>21</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>7</td>\n",
       "      <td>13</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>7</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>11</td>\n",
       "      <td>13</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>7</td>\n",
       "      <td>14</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>8</td>\n",
       "      <td>18</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>5</td>\n",
       "      <td>6</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>7</td>\n",
       "      <td>11</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>5</td>\n",
       "      <td>9</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>8</td>\n",
       "      <td>21</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>7</td>\n",
       "      <td>8</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>6</td>\n",
       "      <td>10</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>8</td>\n",
       "      <td>19</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>7</td>\n",
       "      <td>10</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>6</td>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>3</td>\n",
       "      <td>6</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               num_words  num_feat_samples  most_common_word\n",
       "feature_label                                               \n",
       "0                      9                16                 2\n",
       "1                      5                 5                13\n",
       "2                      7                 8                16\n",
       "3                      8                 9                 1\n",
       "4                     10                20                 1\n",
       "5                      4                 8                 2\n",
       "6                      5                 6                15\n",
       "7                      6                 6                 7\n",
       "8                      6                17                 5\n",
       "9                     10                21                 1\n",
       "10                    10                13                 3\n",
       "11                     7                13                 6\n",
       "12                     6                 9                 1\n",
       "13                     7                 9                 2\n",
       "14                     3                 5                 4\n",
       "15                    11                13                 6\n",
       "16                     7                14                12\n",
       "17                     8                18                 4\n",
       "18                     6                 8                39\n",
       "19                     5                 6                15\n",
       "20                     6                 9                 7\n",
       "21                     7                11                 1\n",
       "22                     7                10                20\n",
       "23                     5                 9                12\n",
       "24                     5                 8                13\n",
       "25                     1                 2                 4\n",
       "26                     8                21                 1\n",
       "27                     6                 6                 9\n",
       "28                     6                 6                 8\n",
       "29                     4                 9                 2\n",
       "30                     4                 8                 2\n",
       "31                     7                 8                19\n",
       "32                     3                 4                26\n",
       "33                     7                 7                 7\n",
       "34                     4                 4                 3\n",
       "35                     4                 6                15\n",
       "36                     6                10                 3\n",
       "37                     7                12                 3\n",
       "38                     8                19                 1\n",
       "39                     6                 6                22\n",
       "40                     1                 2                20\n",
       "41                     2                 2                23\n",
       "42                     2                 3                 2\n",
       "43                     4                 8                 1\n",
       "44                     4                 5                33\n",
       "45                     4                 4                 3\n",
       "46                     7                10                11\n",
       "47                     6                13                14\n",
       "48                     3                 6                 2\n",
       "49                     3                 3                 9"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "## the number of feature labels \n",
    "results_feats = words.groupby('feature_label')['word'].agg({'num_words': lambda x: len(set(x)),\n",
    "                                            'num_feat_samples':      lambda x: len(x),\n",
    "                                            'most_common_word':     lambda x: Counter(x).most_common(1)[0][0]})\n",
    "results_feats\n",
    "## note that word 1 = most common in cluster 38"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5085776345414814"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "homogeneity_score(words.word, words.feature_label)\n",
    "## see definitions in user manual: https://scikit-learn.org/stable/modules/clustering.html#homogeneity-completeness"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dynamic Time Warping Distance Definition"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f64d9ca2048>]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD8CAYAAABzTgP2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsvXd4HNd5qP8eLHrvHSDBDoAkQBKkKJEqVLEqiyQ7KpYtxZblxCX3Oje+sn8pdpzoZzvluty4RLEjq9iSbDWSkihZkiVLptgLQICdIED03juw5/5xdsAFiLILzO7MAPM+D54FZmfmfOTOnu+crwopJTY2NjY2NhoBRgtgY2NjY2MubMVgY2NjYzMGWzHY2NjY2IzBVgw2NjY2NmOwFYONjY2NzRhsxWBjY2NjMwZbMdjY2NjYjMFWDDY2NjY2Y7AVg42NjY3NGAKNFmAmJCYmyoULFxotho2NjY2lOHLkSLOUMmm68yypGBYuXMjhw4eNFsPGxsbGUgghKj05zzYl2djY2NiMwVYMNjY2NjZjsBWDjY2Njc0YbMVgY2NjYzMGWzHY2NjY2IxBF8UghPhvIUSjEKJ0kveFEOLHQojzQogSIcRat/ceFkKcc/08rIc8NjY2NjYzR68dw6+A26Z4/3ZgqevnMeBnAEKIeOBbwFXABuBbQog4nWSysbGxsZkBuuQxSCk/FEIsnOKU7cAzUvUR3S+EiBVCpAE3AO9IKVsBhBDvoBTM83rI5SvON3bz4dkmEqNCKMyMJSs+DCGE0WJZi95WOPMmrPozCAw2WhqbyajcByMDsOgGn9xeSsnhyjY6+4ZIiQ4lOSqEhMgQHAH298lI/JXglgFUuf1d7To22fErEEI8htptkJ2d7RspJ0FKyam6Lt4qrWNPaT3nGrvHvB8XHkRBViyrM2MpzIph46IEwoMtmTvoHzpr4dm7oek0VB2ErT8CW7Gaj8p98Mx2cA7B9p9A4YO63bp/aITXjtXw1N4KzjR0jXkvQEBCZAgp0SGsy47ja7csIzbcXjz4E3/NXhN96+UUx688KOWTwJMARUVFE56jNx19Q/znHy/w5ok6Klp6CRCwfmE8/7gtn5tyk2nvHaKkuoPiqnaKq9v58Ow5nBIy48L4jwfXUpgV6w8xrUXLBXhmB/S1wcpPwtGnIWkFXP0loyWzcaf5HLzwAMRkqp/XvgQjQ7Budm7Ahs5+nt1Xya8PVNLWO0RuWjT/8snVLE2OpLFrQP109tPYOUBdZz/PHbjEGyfq+Pu78thWkG7vzP2EvxRDNZDl9ncmUOs6fsO44x/4SaYpudTSy+eePsTF5h6uWZzAY9ct5hP5KSRGhoyekxkHKzNiePAqtYPpGRjmwMUW/v61Mj75s495/LYVfH5zDgH2tlhRVwLP3QPSCY/shtQCZab4/d9CwhJY9gmjJbQB6G6CX38ShAMeegmi0uDFh2D3X6ndw/pHvb/lwDDf2lnGzuM1jEjJLbkpfG5zDlflxE852Z+s7eSbr57gf7xwnJeOVPPEjlVkJ4TP5l9n4wFCmf11uJHyMbwupVw5wXt3Al8B7kA5mn8spdzgcj4fAbQopaPAOs3nMBlFRUXSl7WSjlS28oVnjjDilPz8oXVcvTjBq+s7eof43y8X83ZZA1uWJ/Hvf1ZIfMQ83wpXfgy/uQ9CouEzr0LSMnV8sAf++zZovQiPvgPJucbKOd8Z7IWnt0JDGTzyOmQWqePDA/Dbh+HsHrjt+7DxLzy+ZUfvEI/86iAl1R08fPVCHrlmoVeT+4hT8tz+Sv717TMMO538j5uW8ei1OQQ57Gh7bxFCHJFSFk17nh6KQQjxPGrlnwg0oCKNggCklD8XaknwHyjHci/w51LKw65rPwf8f65bPSGlfGq68XypGHYer+HrL5WQHhPKfz+ynkVJkTO6j5SSZ/ZV8sQbp4iLCOJH969h4yLvFMyc4ezb8NvPQkyWUgqxWWPf76iB/9oCgaHwhT9ARKIxcs53nCPqczr9Btz3HOTeNfb94UF46c/h9OvwiX+Ga7467S1bugf4zC8Pcr6xm//74BpuzU+dsXh1HX18e1cZb5c1sDIjmmc/dxVx833B5SV+VQz+xheKQUrJj947xw/fPceGnHj+86F1ujx0pTUdfPX5Y1S29PD4bSv44vWLdZDWQpx7F56/D1JWwkMvTz7pVx+BX90B6WvgszshMGTi82x8x55vwIGfTb0jGBmCV74AZa/Czd+GzV+b9HYNnf18+hcHqGrt5cnPFnH9smmrPXsm5ok6/seLx1mdEcNzj15FaJBDl/vOBzxVDPZeDBUh8bUXj/PDd89x79pMnvu8fiuRlRkx7P7qZm5flcZ395xm5/EaXe5rGfb+UDkvH9499U4gcx3s+Clc2gev/zVYcMFiafb/XCmFjV+a2kzkCIJ7fgF5O+Ddf4Su+glPq2rt5VM/30ddex9Pf26DbkoB4PZVafzgzwo5XNnG//ptMU6n/azozbxXDFJKHn+5hNeO1/L1W5fzb59aTXCgvv8tkSGB/PC+QjbkxPP4yyWU1nToen/T0lUPFX+C1fdDaPT056+8F67/Bhx/Tq1IbfxDfye88w+w7HZlIpoORyDc8E1AwsldV7x9sbmH+/5zH+29gzz36FU+MaHeuTqNv70jlzdO1PHdPad0v78pcY6A0+mXoeaXYjj2a9j30zGHXjxUxc7jtfyvW5bx5S1LfBYOF+QI4KefXktceDBffPYILd0DPhnHVJzcCUhYeY/n11z/OESlQ+nLPhPLZhznfq+iwzb/Twjw0CyTvAKS865Q4JUtPXzq5/voH3by/GMbWZPtu0IGj16bwyPXLOS/PrrIr/Ze9Nk4pqH8ffj3ZVA/YeUhXZlfiuHCe/CnH4xq3TP1XXxrVxmblyTypS1LfD58YmQIT36miObuAb78m6MMjfhH+xtG6cvKt5C03PNrAgJgxZ1w/j0VIWPje07thsgUyNzg3XX5dyvTX2ctAMMjTr724nEGh0d48bGN5KfH+EDYywgh+Pu78vhEXgr/+PpJ3i6b2Kw1ZzjzFgx0Q4Lv/ZTzSzEsuw16GqH2KL2Dw3z5N0eJCg3i/9xX4LcU/FWZMXz3nlXsL2/liTfm8Ba4vQqqDqjJw1ty74LhPqXIbXzLUB+ce0cp4wAvp4P8u1HmpJ0A/PyPFzh6qZ1/2rGSpSlR+ss6AY4AwY/uX0NBZix/9fwxjl5q88u4fkdKOLMHFt8IQWE+H25+KYYlN4MIgLNv8Q87y7jQ1M2P7i8kOSrUr2LcszaTz2/O4VcfV/C7w1XTX2BFNBODN2YkjQWbIDQWTr2ur0w2V3LhfRjqgdyt3l+buBRSVkHZq5TWdPDDd89x1+o0thWk6y/nFIQFO/jlw0WkxoTy6NOHqWnv8+v4fqGhFDqrYflUtUr1Y34phvB4yNpI+/FdvHSkmq9uWcKmJcbEzH/z9hVcsziBv32tlONV7YbI4FPKXlGhp/GLvL/WEQTLb1fJVCND+stmc5lTu5USXnjtzK7P3wFVB/j/n3+HhMhg/nnHSkPKViREhvDUI+vpGxzhWzvL/D6+zzmzBxDK6uEH5pdiAJozbiS28wy3Z4/wVzctNUyOQEcA//HgWpKjQviLZ4/Q0TeHJsCWC1B7TEUZzZQVd0F/h4pqsvENI0Oqwu3yO5QyngkuU2Fu2/v8yycLDC12tygpkv9581LePdUw9/wNZ/ZAxjqITPbLcPNKMfQPjfDNUrXN/d7KWgINTqmPjwjmJw+upaGrnx+9e85QWXRFMyPNxL+gsfhGCAxTWbY2vqHiI+hvn5kZycXHbTGUOhfySMwxXXMVZsrnNuewIjWKb+8qo3tg2Ghx9KGzDmqPql20n5hXiuE7r5/knaYYeiOziakyh2OzICuW+9dn8fS+Cs6NKz9sWUpfgayNKrFtpgSHw5KbVHkGP8VuzztO7YagCFi8ZUaXd/QN8Te/K2Zf6LVk9ZZB+yWdBfSeIEcAT9y9ivrOfn7wzlmjxdGHc2+r1+V3+G3IeaMYpJQsTorky1uWEJ5/J5T/URVwMwF/84nlRAQ7+PbuMqxYomQMjaehsWxmTufx5G6FLtdqyUZfnCPKub/0lhlHufzjrjIaugbYtP0xdcAVnWQ06xbE8cCGbJ7ae3FuJJOe2QOx2X4tMDlvFIMQgs9vzuHrt65Qnv2RASj/wGixAOU4++tblrH3fAtvlzUYLc7sKHtFRX7l7Zj9vZbdCgGBamVroy/Vh1To9gzNSG+V1vPKsRq+vGUJefmrVaBB6Ss6CzlzHr91BfERwfztqycYsXLJjMFeNU8tv8OvzazmjWIYQ/Y1qvzz2beMlmSUhzYuYFlKJP/8xkn6h0aMFmdmSKkmhwWbICpl9vcLi4OFm5Wfweo7KbNxajc4gmGp9z0whkacfHfPKZanRPHVG12Jofl3q51dW4W+cs6QmPAg/u7OPIqrO/jNgUqjxZk55R/AcL/fopE05qdiCAxWzs2zb5vGfh3oCODb2/KpbuvjP/9YbrQ4M6P+BLSc08eMpLHiLmg5D01n9LvnfEdKOLULFm3xrIbVOF48VEVlSy+P3778ck8EbYdY9pqOgs6O7YXpbF6SyL+8dYbGzn6jxZkZZ95Ui9gFm/w67PxUDKA8/N0NUHfcaElGuWZxIneuSuOnH5ynus2C5SDKXlFdv3K363fPFXeq19O2OUk36kuUo3gGZqS+wRF+9N451i+MY8tyt9DJuAUqnNJExQ+FEPzTjpUMjDj5zusnjRbHe5xOtXhdcpNazPoRXRSDEOI2IcQZIcR5IcQ3Jnj/B0KI466fs0KIdrf3Rtzeu7JUo69YcstoFrSZ+OYdKxACvvvmaaNF8Q4pVW2kRTdAhI7VNKPTIaPIzoLWk1O7lQKfQZTLUx9fpKlrgP9924orE9ny71YLrVbz7HhzEiP48g1LeL2kjo/ONRktjnfUHlV+ID9GI2nMWjEIIRzAT4DbgTzgASFEnvs5UsqvSSkLpZSFwP8F3L1Ufdp7Uspts5XHYyISVNEwkymGzLhw/vL6Jbxxoo6PLzQbLY7n1BxVq9DZJLVNRu5dasJpn6PlQ/zNqd2wcJPXCryjd4iff3CBm1Yks35h/JUnmNCcBPAXNywiMy6Mf/v9WWtF/Z3ZoxT4kpv9PrQeO4YNwHkpZbmUchB4AZjKlvAA8LwO486eZbdCXfFodUiz8MXr1YP8j7tOMmyVCqylLytnpmb60ZMVLpPH6Tf0v/d8o+ksNJ2GXO/XYD/74wW6Bob5m1snqZYbm6UWWyYyJwGEBDr48pYlFFe18+E5Cy22zuyB7KtVKR8/o4diyADcl3LVrmNXIIRYAOQAf3A7HCqEOCyE2C+E0CHG0Qu0TEKT7RpCgxz83Z25nGno4pWjFun4duE9yLkOwmL1v3fiEkhaYWdB68Epl7XWSwVe39HPU3svsqMwg9y0KRzW+XcrH4aJzEkA967NJCM2jB+9a5FdQ1ulygfyU9G88eihGCYKrp3sf/5+4CUppXs8ZrarB+mDwA+FEBMWGxdCPOZSIIebmnSyFSatUIkjZ9/W5346cmt+Knlp0fz8jxfMH4fd165WoVkbfTfGirugci/0tPhujPnAqd2QuV75brzgx384h1NKvnbzsqlPXHyjer20f4YC+obgwAD+8obFHL3Uzt7zFniGtMWqAf4F0EcxVANZbn9nApPZZu5nnBlJSlnrei0HPgDWTHShlPJJKWWRlLIoKUmnmixCqHaG5R+YrimMEIIvbVlMeXOP+QuC1RxRr1nrfTdG7l0gnariqs3M6KhRvpoVd3l12cXmHl48VMUDG7LJTgif+uTEZSq8svrQLAT1DZ8qyiQ1OpQfvWeBXcOZPer/0g9NeSZCD8VwCFgqhMgRQgSjJv8roouEEMuBOGCf27E4IUSI6/dEYBPg37iy5bepBJKLH/p1WE+4fWUaOYkR/PSD8+Z+kKsPAwLS1/pujLRC1fLzwh+mP9dmYqoOqNdF13t12b///gzBjgC+cqMHXQ4DAlTYqgkVQ0igg7+8YTGHKtrYX95qtDiT09+pqgr7OanNnVkrBinlMPAV4G3gFPBbKWWZEOI7Qgh3D9cDwAty7AyXCxwWQhQD7wPfk1L6VzEs2ATBkaZciToCBH9x/SJKazrN7TSrPqj6/84gWcpjhFA7Em13YuM9NUcgMFS1W/WQ0poOXi+p4/ObczxvaJW5HhrKTFOLzJ371meRHBXCj98zcTXjC++Bc8gwMxLolMcgpXxTSrlMSrlYSvmE69g/SCl3uZ3zbSnlN8Zd97GUcpWUssD1+ks95PGKwJDLWdAmXJXfvSaTtJhQfvr+eaNFmRinU+0YMot8P1bGOlVyocfEStLMVB+GtAKvei/84J2zxIYH8dj1XjRcylyvzH61x2YgpG8JDXLwxesXs6+8hYMXTbpruPA+hMZAlpc9uHVk/mY+u7PoBlXFs918NVWCAwN49NpFHLjYypFKEz7ILedVTf9MH/oXNDJcyqfGrrbqNSNDKjQ7Y53Hl5xv7Oa90408cs1CokO9aOSjLRJMaE4CeHBDNomRwebdNdQcVZ9TgMMwEWzFAJDhso2bdMJ5YEMWceFB/PT9C0aLciXal98fq5u0ApWtXnPY92PNNRpPwnCfV4rhv/deJDgwgIc2LvBurPB4iF8MVeZUDGHBDh67bhF/Ot9svsXWYK/6rLz4nHyBrRgAkvNVcpZJ6/6HBwfy55tyeO90I6fqOo0WZyzVh9S2N8EPbVJDIpUvw/YzeE+1S5l6aPJr7RnklaPV3F2YQWJkiPfjZa5Xz4YJzbOgqhnHRwTz4/dMZqKtLwE54ttADg+wFQOoAlWpq6DGfDZRjYevXkhEsIOffWCyXUP1IWXiCfDTo5SxVikGk044pqXmCIQnQqxnq//fHKikf8jJ5zbnzGy8zCJV58cEXd0mIjw4kC9cu4g/nm3ieFX79Bf4C81qkWErBnOQvlbFeDvN2QshJjyIhzYu4PWSWiqaTRLtMdCltr3+8C9oZKyDvjbTZdaanurD6v/Og2Yvg8NOntlXybVLE1meGjWz8bRnwqR+BoDPXL2A2PAgfmKmwI7aoxCdAVGphophKwaNjLUw2A3NJnVIAZ/fnEOgI4D//NAkk2LNURV94svEtvHYDmjv6e+A5rMem5FeL6mlsWuAz890twCQkg+BYZdNWCYkMiSQBzdk896pBvOUua85orrhGYytGDQ0m55J/QwAydGhfGpdJi8fqabBDI1HtNWgPx1lSSsgKNx2QHtD7TFAevQ5SSn5xUcXWZocyfXLZlFhwBGkJjgT7xgAPu1yrP/6gAlMXtpO2GAzEtiK4TKJS1Wim8lXol+8bjHDTidP7a0wWhT1pU9cplpw+gtHoJpwbAe052irdg8Uw/7yVk7WdfK5zTlX9lvwlswi5UwdHpjdfXxIRmwYt+Sl8MLBS8a31NXyPgyOSAJbMVwmwKHKLph4xwCQnRDOzbkp/PZwFQPDBj7IUirFkGlAEk7GWqgrgeFB/49tRWqOqKgxDyrf/vJPF4mPCObuNRMWSPaOrA0wMqg+KxPz2asX0tY7xOsldcYKoi120gqNlQNbMYwlY43qW2zyCeehjQto7RnkrVIDi+u1XYTeFv9kPI8nowhGBqCh1P9jWw0pLzuep+Ficw/vnW7goauyCQ3SIbkqw9yJbhrXLE5gcVIEz+6rMFaQmmOQsMQ3peu9xFYM7qSvVSucxjKjJZmSzUsSWZAQzq/3G2gXrfJjYtt4tEnONidNT0eVChv1QIE/tfciQQEBPHS1lwltkxGdBjFZplcMQggevmYhxdUdxoau1h41hRkJbMUwFpNnQGsEBAge3JDNwYpWztR3GSNE9SEIjlLOYH8TkwkRybZi8ATt/2iaCaejd4jfHa5ma0G658XyPCGzyNSRSRp3r8kgItjBMx9XGCNAZ60qy2NwYpuGrRjciV0AYfGm9zMAfKooi+DAAH59wKD6TtUHlSI1op6LEJaZcAyn+jA4QqatqPqbg5foGxqZXYjqRGSuh45L0GXuniJRoUHcuy6T10vqaOk2wFluksQ2DVsxuCOEK7PWvBnQGvERwdy5Ko1XjtbQMzDs38EHe6G+1L+JbePJWAst51T3OJvJqTmiakwFBk96yvCIk2f2VXDN4gTy0nUunT6a6GZ+Jf7ZqxcwOOLkhUNV05+sN7VHISBQVWAwAbZiGE/6Wmg6Zcpa8uN5aGM23QPD7CqerGGej6g9puq5GKoYii7LYjMxI0NQe3xaM9KH55qo6+jnM94Wy/OE1NUQEGR6PwPAkuQorlmcwK/3VzI84vTv4DVHVB2woDD/jjsJtmIYT8Zalc1r8hA7gLXZcaxIjeK5/ZX+7fCmfcmNVAxadqid6DY5WkXVaRzPLxysIjEymJtyU/SXISgU0lZbYscAKnS1tqOf9043+m9QKdUCxyRmJNBJMQghbhNCnBFCnBdCfGOC9x8RQjQJIY67fh51e+9hIcQ518/DesgzKyyQAa0hhODTGxdQVtvp32iK6kMQvwgiEvw35njCYlVsvskDBQzFA8dzY5eaBO9dl0lwoI/WiZnr1fdpxM8mzxlwc24y6TGhPLOvwn+DtparsiUmiUgCHRSDEMIB/AS4HcgDHhBC5E1w6otSykLXzy9c18YD3wKuAjYA3xJC+DGNdgKiUlQRK4tMOFo0xXP+Cl01MrFtPJoD2q60OjHVRyA8AeIWTnrKy0dqGHFK7ivK8p0cmethyNVnwOQEOgL49MYF7D3fwvlGP0X8aQrcJBFJoM+OYQNwXkpZLqUcBF4Atnt47a3AO1LKVillG/AOYFwHbI30NZbYMYAqBLZjTQavl9TS3uuHxLyOKuhuMCaxbTwZ61SMfke10ZKYk5qpK6pKKXnx0CU25MSzKCnSd3KYvKPbeO5bn0WwI4Bn9/kp4q/mqCo4aETo9yTooRgyAHc3frXr2HjuFUKUCCFeEkJoyxNPr/UvGWvV9q6vzWhJPOKhjQsYGHby0hE/TJBVB9Wrgf1oRxlNdLOG/dqv9HdC05nLTvoJOHCxlYqWXu5f78PdAqgw8Igky/gZEiNDuHN1Gi8fraFv0A9lZ2qPQnqhqgNmEvRQDBMtR8bv7XcDC6WUq4F3gae9uFadKMRjQojDQojDTU1NMxbWI0b9DNaIeMlNi2bdgjh+c+CS753Q1YdVddPkfN+O4wkpK1WMvp3odiW1RwEJmZPbrV88VEVUaCC3r0zzrSxCXO7oZhH+rCiL7oFh3irzcf0krRe3icxIoI9iqAbclxyZwJj4SSlli5RSyxr5L2Cdp9e63eNJKWWRlLIoKWkW5YA9YTTixRrmJIBPX5VNeXMPH19o8e1A1QfVQ2yG1U1gsCvixVYMVzCN47mjd4g3T9SxozCDsGA/JClmFqm8k16T9ViehKty4smKD/P9LrzxFAz3myoiCfRRDIeApUKIHCFEMHA/sMv9BCGE+5JkG3DK9fvbwCeEEHEup/MnXMeMJSxWNTO3yI4B4I5VacSFB/k2E3pkSBUZNNNDnLFOdd6zQMSLX6k+4irINnEsx87iGgaGndznazOShhbabJHdXUCA4N61mXx8ocW3TXw0X6YJmvO4M2vFIKUcBr6CmtBPAb+VUpYJIb4jhNjmOu2vhBBlQohi4K+AR1zXtgL/hFIuh4DvuI4ZT8ZaS+0YQoMc7FiTwbsnG33nhG4+p4oMphX45v4zIWOdinhpOjX9ufMFKS87nid8W/L8wSpWZkSzMiPGPzJpE1/tcf+MpwP3rs1EShW55TNqjkBorAr/NhG6BC5LKd+UUi6TUi6WUj7hOvYPUspdrt+/KaXMl1IWSCm3SClPu13731LKJa6fp/SQRxfS10JXrelrvLhz79pMBkec7PZVXXmtzHWKCfwLGnal1SvpqFaRY5M4nktrOjlV18l967P9J1NIlAqbtVCp9Kz4cK5ZnMBLR6twOn3ku6txJbbNtimSztiZz5NhkUqr7uSnR7MiNYqXfWUXbSgFR7AyUZiF+EXKXGIrhsto/xeTOJ5fOHSJ0KAAthWk+1EoVLBAg7lL2o/nk+syqWrt42CFDwwZg67cDpM5nsFWDJOTuhqEwzL5DKAyoe9dm8nxqnbON3brP0BDGSQtV/18zYIQ6otlIQXucxpK1bM7QeRY7+Awu47XcseqNGLC/Pw5puRD6wU1IVqE21emERkSyO8O+2CxVV+iao6ZKONZw1YMkxEcDsm5lptwtq9JxxEgePmoDx7khrJpyzcbQuoqFbM/MmS0JOagoUzt6oKu7Kvw5ol6ugaGud+fZiSNlHxVh6zp9PTnmoSwYAd3rU5jT2md/lWMTVZq2x1bMUyFlgFtoZILyVGhXLc0kVePqlIHutHTohqJmFExpOSDc0g5x21cCnxiP9CLhy6xKCmC9QsNqDyjPTsWNCf1Do7wxgmdfXe1RyEqHaJS9b2vDtiKYSoy1qrs57YKoyXxinvXZVLf2c/HF5r1u6kZHc8amkwWm3B8Qn8ntFdCypXlyi40dXOooo37irIQRjg74xaq5EiLfU7rFsSxKDGCl/Q2J9UVq4xnE2IrhqnQwjLrTxgrh5fcnJtCdGigvk5o7ctsxh1DwlJV89/kvbr9QqMrbHeCz+m1YzUECFV40RACHMo8a6HIJHD57tZlcrCilYpmnfq0DPVDywVzLrSwFcPUJOUCwhJVId0JDXKwtSCdt8rq6erXye7eUKb6LEf6OOt8JgQGQ+Iyy61EfYKmHMdNOFJKXj1Ww6YliSRH69jT2Vu0yCQLmWcB7lmbQYBAP99d8xnleLYVgwUJDof4HEtOOPeuy6R/yMmeEzrlYTSUmvYhBpRsDdZS4D6hoQxCoiFmbEbz4co2qtv6uGetwTUqU1ZCX6ul8oMA0mLC2Lw0iZePVOvju9PmFDPUHJsAWzFMR0q+5XYMAGuyYpVdVI8VzsiwMlGkmtCMpJGSB53VlqmI6zMaylSLyHE+hFeP1RAW5OATeQY7Oi3sD/rUukxqO/rZp0c9soYyVQDSZBnPGrZimI7kfFWC20Kx1+BmF73YSlXrLGVvvQAjA+b0L2iMRrxYT4nrhpTq3z8WxjOSAAAgAElEQVRuZzcwPMIbJXXcmp9CRIjBxQ81p7jF/AwAt+Qp393vjlRNf/J0NJ505QSZoBjlBNiKYTpS8iwXe61x95oMhB52UTNHJGlosllwd6cbHdUw0HHF5/T+6SY6+oa4e22mQYK5ERYH0ZmW3DGEBjnYVpjOW6X1dM7Wd9dw0tQLLVsxTEeydSec9NgwrlmcwCtHa2bXp6GhDAIClYPXrESlqWJkFlyJ6kbDxI7n147VkBgZwqbFBvbodicl35KKAeCetZkMDDt5u3QWPpKeFuiunzCk2CzYimE64nNU2z2LmijuXZvJpdZeDlXMwvbeUKaUQmCIfoLpjRCuiBdrfk66oEUkJeeOHuroHeIPpxvZVpBOoMMkX/eUfBWVM+yHVrQ6syYrluz4cHYen7BtjGeMfk62YrAuAQ5lC7RojPxtK1OJCHbMLqehvtTU295RUvLUzs7pNFoSY2gog9hsCL1cSvuNE3UMjjiNj0ZyJyUfnMPQfNZoSbxGCMH2wnQ+vtBMY2f/zG6iLV5MbJq1FYMnWDgUMjw4kNtXpfHGiTr6h2bQv7avTUX7mPghHiUlHwa7oeOS0ZIYQ0PZFeGPrx2rYUlyJPnp0QYJNQEWLY2hsb0wHadk5uXtG8sgLB4iU/QVTEdsxeAJyXnQ0wg9OpaY8CM7CjPoHhjm/dON3l88urqxwI4h2bqhkLNmeEDVinJT4FWtvRysaHUFIZio3n/CElW+vcFaFQU0liRHkZ8ezc7jM2zgo0WOmekzGYcuikEIcZsQ4owQ4rwQ4hsTvP/XQoiTQogSIcR7QogFbu+NCCGOu352jb/WFFg49hrg6sUJJEaGzMwuOolD05RotnWLfk6zounKTFpt4tpe6Oe+C9PhCISkFZb+nHYUZlBS3UF5k5fl7Z1OlRNk8u/TrBWDEMIB/AS4HcgDHhBCjPeqHAOKpJSrgZeAf3F7r09KWej62YYZsbhicAQIthak8Yczjd6H2TWUqm2vCStAXkFIJMRZM1N91oyrZaWVwNiQE09mXLiBgk2CBZv2uLO1IB0h8H6x1V4BQz2mdjyDPjuGDcB5KWW5lHIQeAHY7n6ClPJ9KaWWZbUfMEFAtRdEJkN4omUd0ADbCtIZnEmYXUOpyng28bZ3DBYOhZwVDaVjMmlP1HRwoanHuIJ505GSr9qPdjcZLcmMSI0JZWNOAruKa70LBbeA4xn0UQwZgHsqYLXr2GR8Htjj9neoEOKwEGK/EGLHZBcJIR5znXe4qcmAhyklz7IOaIBCV5jdrmIvVjjOEde21wL+BQ2tS9hQn9GS+JfGk5C8YjST9tVjNQQ7ArhjVZrBgk3CaEKidZX49sJ0Ljb3UFLd4flFjScBoUxpJkYPxTDRUnJCFSqEeAgoAv7V7XC2lLIIeBD4oRBi8UTXSimflFIWSSmLkpIMqPCZnK+yny0aCqmF2e0930xjl4dhdm0VMNRr+tXNGJKtm6k+K9y66w2PONldXMtNucn+b9/pKamr1KuFd3e3r0wj2BHgnTmpoUz1pQiJ9JlceqCHYqgG3Es5ZgJX/E8JIW4G/hbYJqUc0I5LKWtdr+XAB8AaHWTSn5Q8NUm2XTRakhmzrUCF2b3paZidFUphjGc+1kzqaVZmGZfd+qPzzTR3D7LDrGYkgIhEFa5pYcUQEx7EDcuT2F1S63nF1Sm665kJPRTDIWCpECJHCBEM3A+MiS4SQqwB/hOlFBrdjscJIUJcvycCmwBzfqMtXBpDY2lKFLlp0ez01JzUUAYiwPTb3jGMZqpbd8LxmnGRY7uP1xIdGsgNy03YO8OdlHzLlzDZsSaDpq4BzyquDvUpM6fJHc+gg2KQUg4DXwHeBk4Bv5VSlgkhviOE0KKM/hWIBH43Liw1FzgshCgG3ge+J6U058ybvAIQlp9wthemc+xSO5daPKi4Wl/qaiof5nvB9CLAoT4ri084XuEWkdQ/NMLvTzZw+8o0QgIdxso1HSn50HhalXW3KDeuSCYqJJDXPMlpaDqjzJwmrpGkoUseg5TyTSnlMinlYinlE65j/yCl3OX6/WYpZcr4sFQp5cdSylVSygLX6y/1kMcnBEdYtmmPO1sLVEz7rmIPHuQGi5TCGI9Fe2jMmIYyiEiCyCTeP91I98Dw6OdsalJWqnLurReMlmTGhAY5uHVlKm+V1k9fWaDROsmiduazNyTnWX7CyYgNY/3COHYenybMbrSpvPntoVeQnA89TdA9g0xvK9J42W69u6SWxMgQrjZLJdWpGM0PsvbuTqss8IfpKgs0lEFgqGmb87hjKwZvSHE17bF4KOS2wgzONXZzur5r8pOmaCpveiyekOgVbiHFXf1DvHeqkTtXpeIIsEDeSeIyVc7d4p/T1YsTSIoKmb5ERkOZKsgZYHITH7Zi8I45Egp5x0o1cUwZZqfVsbHijmE+KYbWchjuh5R83j3VwMCw0xpmJFBl3BOXWf5zcgQItq5OVw2ReqeoLNB40rQ9nsdjKwZvGJ1wrG1OSogM4dqliewursU5WZhdQ5kq3xxjrSR1YE6EQnrMaFP5PHYdryUjNoy12XHGyuQNcyRTfXthOoMjTt4qmyQUvKdFhRRbZKFlKwZviF+kbIQW9zOAepBr2vs4emmSBj5awpRVSmGMJyXf0lm1HuMKKW6LWMRH55q5a3UaAVYwI2mk5ENHFfS1Gy3JrFidGcOChHBenyxHSHsWLRCRBLZi8A6taY/FnWUAt+SlEhI4Sdam0zlhU3lLkZxn+VBIj2gog4SlvHWmnWGntI4ZSUPzYVl8sSWE4K7Vaew930xz98CVJ4zu7KzxnbIVg7ckW7dpjzuRIYHcnJfCGyfqGBoZV+aj4xIMdlkiEWdSRkMhy42WxLc0lkGKMiMtSowwV0MeT5hD/qCtrsoCe05MsGtoKIPwBFWQ0wLYisFbUvIt3bTHnW0F6bT2DPLx+KxNKzXnmQxtyz4HdneTMtAFbRV0xy5n/8UWVyloC5mRAKLSICwO6q3ZtMed5SlRLE2OZHfxBIqh8aRaaFnk87EVg7eMTjjWX+HcsDyJqJBAdo8vkaFt65OW+18ovUhcDsJheRPFlLhCivd1pyEl1jMjgZook/Mvh0dbGCEEWwvSOVTZSl2HW0i706nMmhZaaNmKwVvmQM0kjZBAB5/IT+XtsnoGht2yNhtPQUw2hFrMLOFOUCgkLp0TCnxSXLuh31VHk5cWzZJkc1fsnJTkXPXMedPXwKTctVop6TfcndBacx6LOJ7BVgzeE5msbIVzZMLZWpBGV/8wH551M401nrrcJtPKJOfNbVNSw0mcQZH8vibYmrsFjeRc5dPqqDZaklmzKCmSlRnR7HZXDBZzPIOtGLxHCNeEMzcUw6YlicSFB102J40MQfPZuaEYUvKh/ZIq7zEXaTxFQ9hiQEXEWBYtyGEOmJMAtq5Op7jKrVBlg6s5T7J1qhTbimEmpFi7aY87QY4AbluZxrunGugbHIGWC+AcsnaoqoY24TSdMVYOXyAlNJZxrD+VtdmxZMWbsK+zp2iLkDlgngW406Wkd5e4FluNZaoAZ3CEgVJ5h60YZkKy9Zv2uLO1II3ewRFVBEz7cs6FHcMcm3DG0N0AfW0c6Em1thkJICwWojPmzI4hMy6ctdmxl3fhDSctF/ptK4aZMEeScjSuylFFwHYX16ovp3BAwlKjxZo9sQsgKGLOfE5jcP2bzsnM0RWqpUnOnVOf09aCdE7Xd3GhtlGVFbfYDlwXxSCEuE0IcUYIcV4I8Y0J3g8RQrzoev+AEGKh23vfdB0/I4S4VQ95fI5mK5wDiW6gioDduSqNP5xpZKiuFBIWq6geqxMQoD6rOTThaEjXsxeZtZrkqDnwWSXnKpPfHMlUv3NVGkLA/gP7VeHN+bZjEEI4gJ8AtwN5wANCiPH/C58H2qSUS4AfAN93XZuHagWaD9wG/NR1P3MTHKEaes+hCWdrQRqDw04GakvnhhlJQwuFnGO0V5TQJGPYss5aE86kJOepTPU5Yp5Njg5lY04Cl84cdh2w1uekx45hA3BeSlkupRwEXgC2jztnO/C06/eXgJuEStHcDrwgpRyQUl4EzrvuZ36S51aXsDVZcSyKCSC8p8pyD/GUjDbtaTJaEl3pqznBWZnFbfmpRouiD3PQH7S1IJ247gs4HSGWaM7jTqAO98gAqtz+rgaumuwcKeWwEKIDSHAd3z/u2gwdZJqQ7x/8Pqdb9eqlUA9BHbDnYRBzw1UTktnM53uSGGn+E463/txocfShrx1Sk+HdxyA01mhpdELijGqlIy6euI++aLQw+iCd6nMq+TFces1oaXRheETSnXmSjxypBL/zBV3uuSJ+BY9veFyXe02FHjPaRMU/xqcwTnaOJ9eqGwjxmBDisBDicFOTCVZ/weEqZNDi3dzciQtSTUbah4MMlkRHgl1hnIO9xsqhIz09PQTgJDDUopnOEyECIChMRfvNEQIdgggxQLczxGhRvEaPHUM1kOX2dyYwvpazdk61ECIQiAFaPbwWACnlk8CTAEVFRTPKnddV0zaegp9uhKvvhYL79Luvgci3/46h04d51PF1nrr/GqPF0Qcp4V8WQfpyuO3HRkujC88/+3MeqP89PZ99lohFG40WRz9e+LRKrvzMU0ZLog99bfD9hXx36AFuvf27lmqgpMeO4RCwVAiRI4QIRjmTd407ZxfwsOv3TwJ/kKoT/S7gflfUUg6wFDiog0y+J2EJBATNKZuoaDpFe0QOfypvo6lrgpryVkQIV9OeufE5jTgl7RePAxCRYa0QyGlJzlMJlkP9RkuiD43KbF0ekH1loUqTM2vFIKUcBr4CvA2cAn4rpSwTQnxHCLHNddovgQQhxHngr4FvuK4tA34LnATeAr4spRwZP4YpcQSpfrVzZMIBoPEUIRmrVE350kk6UVmROVSk7eDFVjKGKugNz4CQKKPF0ZfkXJAj0HLOaEn0wdW1LWFRIW+U1DEyWRtdE6KL11RK+aaUcpmUcrGU8gnXsX+QUu5y/d4vpfyUlHKJlHKDlLLc7donXNctl1Lu0UMev5GSN3dCIfvaobOGmOzVLEuJ5PWJaspbleRcGOxWLSQtzusltawIqCYk3TolnD1Gi4abI/lBNJ6CkBg2ry2gsWuAgxdbjZbIY+ZGOI1RJOeqyaa/w2hJZk+TK1orOY+tq9M5WDGupryVmSNF2oZGnLxzoorFohZH6hwzI4FKrJxL5llXleIbc1MID3awy0LmJFsxzIbR3gx6hcAayGhp4FzuctXemTO7Bi1G3uIVcT++0EJs3yUcjMytXBONUfOstRU4oMyWDWWQnEt4cCA356awp3SCNromxVYMs2E0KcfaEw6gvozBURCTSU5iBKsyYi5Xh7Q6oTEQnWn5CWd3cS0FIa7PZC5lp7szV8yzXfXQ3z5aI2lbQTrtvUP86bw1WgLbimE2xGZDcOTceJC15jyunrTbCtIpqe7gYnOPwYLphMVLYwwMj/B2WT23JraqIoeJc6DI4UQk50LHHOih0Xh5Bw5w7bJEokMnaKNrUmzFMBuEUB+81Z1lUrqalV9ehd5V4Kopb5EHeVqSc6HZukXaPjzbTFf/MIWhdSpUOtB6SVMeMVd6aGiLENe/JyTQwW0rU/l9WQP9Q+YPvLQVw2xJzlOTqpVDIbsboa91jN06LSaMDQvj2VVci7Tyv00jJR9GBlUJZAuyu7iW+IhgEnrOW6p3sNfMlZpJDSchMhXC40cPbSvIoHtgmA/ONBoomGfYimG2JOepSbW7wWhJZs4kzXm2FqZzvrGb0/VdBgilMxaecHoHh3nnZANbc2MQbRVz0/GsEZPt6qFhXbMfcMUOHGDjongSI4PZbYGgDlsxzBZt9WbBCWeUcdtejTtWpuIIEJYKs5uUxGWqHo8FJ5w/nG6kb2iEe7O61YG56niGudFDwzmiwr/HNecJdARwxyrVRrd7wNwmTVsxzJa5kJTTeBLCEyEyaczhhMgQNi9JZPdcMCcFhanSxxYMWd1dXEtyVAgrg2rUgbm8Y4DL5lmr0lYBw/0TKvBtBekMDDt596S5LQy2YpgtEYkQkWzJlegojacmtVtvLUinuq2Po5fa/SyUD0i2XihkR98Q759p4s7VaQQ0nYbAMNUkai6TnGftHhqjptkrv1Nrs+NIjwk1fVCHrRj0IDnXurkMTqfa9k6yCr01P4XgwADTP8gekZwHreWWKpX+dlk9g8NOdhRmqN1O0nIIMH+Tw1mhrbSbrKXER2k4CQhIWnHFWwEBgrsK0vnwXBPtvYP+l81DbMWgByn5KvvZaY2sxjF0XFJ1hCaxW0eFBnHj8mTeOGGtImATkpwLSEuFQu46XsvChHBWZ8a4ck3muBkJrF/CpPEkxOdc7gUyjq2r0xkakbxVWu9nwTzHVgx6kJwLw33QXmG0JN4ziePZnW2F6TR1DbC/vMVPQvkIzRloEft1Y2c/H19oZlthBqKvDbrr57bjWSMyGcLiLfM5XUHjySm/TyszoslJjDB1ZQFbMeiBVjPJig5o7cs3wbZX48YVyUQEO9h13LwPskfE5YAjxDITzu6SOpxSOSw9UeBzBiEs6Q8CVC+JlgtTKnAhBFtXp7HvQguNXebsPWErBj1IWq5erfggN56CmCwIjZ70lNAgB5/IT2VPaR2DwxY0l2k4AiHJOkXadh2vYWVGNEuSIy8rs7mc3OaOVXtoNJ9VPSWmUeBbC9JxSnizxJw5DbZi0IOQSBUpYkUHtFYjaRq2FaTT2T/Mh2ctGimiYZGV6MXmHoqrO9hekKEONJ5UxQCj0owVzF+k5MFAJ3TWGC2Jd3i4s1uaEsWK1Ch2mjSoY1aKQQgRL4R4RwhxzvV6RVNTIUShEGKfEKJMCFEihLjP7b1fCSEuCiGOu34KZyOPoVhkwhnDyJBa4XigGDYvTSQ2PMj6yW7JeWqy6WszWpIp2XW8FiEu16wadTy7ihzOeayaH9R4EhzBqrfENGwvzODYpXYqW8xXqHK2O4ZvAO9JKZcC77n+Hk8v8FkpZT5wG/BDIUSs2/tfl1IWun6Oz1Ie40jOg+ZzMGyhXsmt5ap+kAd26yBHALevTOOdkw30Dpo7a3NKRiNezNtDQ0rJzuIarsqJJy0mbMIih3MezedlEX/QKI0nVZa9I2jaU7cXqr4nO03ou5utYtgOPO36/Wlgx/gTpJRnpZTnXL/XAo1A0vjzLI/Wr7bZQv1qG8aWBp6ObQXp9A2N8O4p8xcBmxQL1Ewqq+2kvKmH7YUuM1JnreoSOB8czxphsRCdYb1duBchxemxYWxcFM9rx2pMV1lgtoohRUpZB+B6TZ7qZCHEBiAYcC9x+YTLxPQDIYR1awlbLBQSgIZSCAiExOUenb4hJ57U6FB2HbeY3dedmEwIiTb157TzeA1BDsEdK93MSDC/FANYL3G0v0O1+vViZ3f3mgzKm3soqTZXe+BpFYMQ4l0hROkEP9u9GUgIkQY8C/y5lFILbfkmsAJYD8QDj09x/WNCiMNCiMNNTSZ0gCYssV6/2voTSikEhXp0uiNAsL0wnQ/ONNHSbSGTmTtaDw2TrkRHnJJdxbXcsDyZmHCXOWKS6rdznpSVKhlx2LwZwmPQzJMpnvfjvm1lGsGOAF49Zq7F1rSKQUp5s5Ry5QQ/O4EG14SvTfwT2hiEENHAG8DfSSn3u927TioGgKeADVPI8aSUskhKWZSUZEJLlNav1krOsroSSF3l1SV3r81g2Cl53aRhdh6RnGvaHhoHLrbQ0Dkwan8GlBIbV9t/XpC2WvnAmi2Sqd7onWkWICYsiJtyk3m9pJZhE/WDnq0paRfwsOv3h4Gd408QQgQDrwLPSCl/N+49TakIlH+idJbyGIuJV6JX0N2oMmnTVnt12YrUaHLTonnFZCscr0jOU1FJJuyhset4LRHBDm5akXL5YEPp/NstAKS6ns26EmPl8JTRvulZXl22Y00Gzd2DpuoHPVvF8D3gFiHEOeAW198IIYqEEL9wnfNnwHXAIxOEpf5aCHECOAEkAv88S3mMJSXPOv1q60+oVy93DAD3rMmguKqdC03dOgvlJzRbfb251iEDwyO8eaKOW/NTCQt2FcobHlQTjpcKfE4Qv0g17dGeVbMzrm+6p9ywPImYsCBeM9Fia1aKQUrZIqW8SUq51PXa6jp+WEr5qOv356SUQW4hqaNhqVLKG6WUq1ymqYeklBadaVyM9qs1byjkKPWuVVjKSq8v3V6YToDAVA+yV2jKsL7YWDnG8cczTXT2D7PN3YzUdBqcQ5dXz/OJAIey19dbYMcgpYrym8HOLiTQwR2r0ni7rIEekzTwsTOf9WQ0KccCkRT1J1QbxRnYrZOjQ9m0JJFXj9XgtGLF1bBYiF1gOhPFzuJaEiKC2bQk8fJBbVJMKzBGKKNJW62eVRP6g8ag9U33wvHszt1rMugbGuEdkzTwsRWDnsRkQXCkNSKT6k/MyIykcc/aDKrb+jhcae4M4klJK4A68+wYOvuHePdkA3esSiPI4fa1rCtR5pT46TNp5ySpq1RpjLYKoyWZGs3cNcOQ4qIFcWTEhpkmOslWDHoSEODa+prcJjrYoxLxZmG3vjU/lfBgB68eq9ZRMD+SthraLqrYcxPwZkkdA8NO7l2XOfaNumI1OQbM06+qZkIz+3eqzlW0YYbfqYAAwY416Xx0rommLuNDwefp0+ZD0grVKs/MTXsaTgJyVjuG8OBAbstP5fWSOvqHRvSTzV+kueIfTDLhvHSkmiXJkRRkxlw+6HSqiKT56HjWSM4D4TC/n6GuWDnLQ2OmP3cSdhRm4JSYoluirRj0Jq0Ahnqg5bzRkkyO9iWbhWIAldPQ1T/MH05bsESGiUIhLzb3cLiyjU+uy0S4R7S0lqvuevPR8awRFKrK2ptEgU9KXfGs/UBLU6LIT49mpwkqC9iKQW/SXStRE9mvr6C+BEJjvY63Hs81ixNJiQ7hlaPGP8heE5WiksZM8Dm9fKSaAKEckGPQoqbm844B1ALGBAp8Unpbob3y8i50Fty9JoPi6g7DQ8FtxaA3icshMPSyzdGMaI7nWZZwViUyMvjgTCOtPRYpW+BO2mrDTRROp+SVo9VcuzSJlOhxpUnqSlSZlaR5mNzmTupq6KqFHvMkgI1Bx8ixrQUqFHynwU5oWzHojSNQ5QaYYCU6ISPDKpxWJ/PE3Wu0EhnG20W9Jq1A1eIZ6jNMhH3lLdR29PPJ8U5nUM9Qci4EBvtfMDMxmndi0l2D9l3XQTGkRIdyzeJEXj1ubCi4rRh8gRYKaUYHdMt5GO7XzTyRmxbNitQoa5qTUlerUukG1rd66Ug1UaGB3JKXMvYNKdVEON/NSHBZMZjVnFRXPOOcoIm4d10GVa19HLjYqsv9ZoKtGHxBeqEr9vqi0ZJcySxKYUzG3WsyOF7VTrnVSmRoKzyDMqC7+ofYU1rHtoJ0QoMcY9/srIXeFkidp4lt7oTHK3+YWR3Qtcd1VeC3r0wjKjSQFw9d0u2e3mIrBl+gTThm9DPUl4AjRFWC1YnthRkIK5bIiM1WTniDzH5vnqijf8g5sRlpvmc8jyfVeH/QhPR3QuuFy0EnOhAa5GB7YTp7Suvp6BvS7b7eYCsGX5CUq/q+mtHPUF+i7NYetB70lNSYUDYvSeTlozWMWKlEhhBqpWeQieKlI9UsToqgMCv2yjfrSgAx4xILc47UVSopc9Bk/ZG1XYwOEUnu3FeUzcCw07CmWLZi8AWBwSoxp9ZkOwYpZ10KYzLuW59FTXufqUoHe0TqauWMH/HvyqyiuYdDFW3cOz53QaOuWDV/Con0q1ymJW01IM3X70RHx7M7KzNUefsXD1fpel9PsRWDr0gvVA+NmYp/aXZrH5gnbslLIT4imOcPGGcXnRFpBTAyAM1n/TrsK0dV7sI9ayYwI4HL8WybkUYZLY1hMnNS3XGISoPIKbsae40QgvuKMimt6aSs1v9lW2zF4CvSCqC/XSW+mAUfOJ41QgId3Ls2g3dPNZii1ovHjPqD/Gf2czolLx+tYfPSJFJjJmir2tuqegfbEUmXiclU/iDTKYZi3c1IGjvWZBAcGMBvD/l/12ArBl+RZsIM6PoT+NJufd/6bIadkpeOWKiwXsISCAr3q59hf3kLNe19Ezudwa1kia0YRtH8QWaKTBrsUTtNH+3sYsODuTU/ldeO1/q9HtmsFIMQIl4I8Y4Q4pzrNW6S80bcurftcjueI4Q44Lr+RVcb0LlBch4EBJrLz1DvKvQVEuWT2y9JjmTDwnhePHQJaSYT2lQEOPyekKjlLnxifO6Cho/s1pZn1B9kjmY21JeCdPr0c7qvKIuOviHeLqv32RgTMdsdwzeA96SUS4H3XH9PRJ9b97Ztbse/D/zAdX0b8PlZymMegkJV9I/Zdgw+MCO5c/+GLCpaetlX3uLTcXRFW4n6ISGxe2CYPaX1bJ0od0GjrkTF7euUMDVnSF2tkjNbzhkticIPCvyaxQlkxoXxWz87oWerGLYDT7t+fxrY4emFQoVi3Ai8NJPrLUFagXJOmWH13N+hmp34WDHcsSqN6NBAXjhoTDTFjEgrgMEuvyQkvnashr6hkcnNSKBMSbYZ6UpGS2OYxJxUVwzhiRCdPv25MyQgQPCpdVnsPd9CVWuvz8a5YtxZXp8ipawDcL1O5poPFUIcFkLsF0Jok38C0C6l1PaF1UDGxJdblLRCFQXUaYLEL63xvY/NE6FBDu5ek8FbpfW0WaWw3mgJbt/u7qSUPLe/kvz0aNZMlLsAujRRmrMkLlPJmWbZhdcVq+jDWRajnI5PFmUiBPzOj7uGaRWDEOJdIUTpBD/bvRgnW0pZBDwI/FAIsRiY6H9z0qW1EOIxl3I53NTU5MXQBqI5oM3gZ/BhRNJ47t+QzeCIk1eskgmdnKuqmPp4wjlc2cbp+i4+s3HBxLkL4OoXLu0dw0Q4Ava7z8gAABmhSURBVCElzxw7hqF+aDrlFz9QRmwY1y5N4ndHqv2WQDqtYpBS3iylXDnBz06gQQiRBuB6nbBji5Sy1vVaDnwArAGagVghRKDrtExg0hKdUsonpZRFUsqipKQkL/6JBpK6UnWfMsMKp/4ERCRB5CQOTx3JTYumMCuWFw5axAkdGALJK3weCvnsvkqiQgPZVjiF6cF2PE+NVhrD6OeqsQycw377nO4ryqKuo5+PzvlnUTxbU9Iu4GHX7w8DO8efIISIE0KEuH5PBDYBJ6WaMd4HPjnV9ZYmKEx1nzJDzaT6YvWl8vG2V+OBDVmca+zm6KU2v4w3a7SKuD6acJq6BthTWsen1mURHhw4+Yl1xRCe4FO7taVJXQV9bcabZ/2swG/OSyYuPMhvTujZKobvAbcIIc4Bt7j+RghRJIT4heucXOCwEKIYpQi+J6XU8tofB/5aCHEe5XP45SzlMR9phcbvGIYHofG0X8xIGnetTici2MHzVnFCpxa4/EG+6Svx4qFLDI1IPr0xe+oTNceznxS45RhNSDQ40a2uWCXcxS7wy3AhgQ7uXpPJOycbaOn2fQLprBSDlLJFSnmTlHKp67XVdfywlPJR1+8fSylXSSkLXK+/dLu+XEq5QUq5REr5KSmlhVJmPSStALoboLPOOBmaz4BzyK8OzYiQQLYVZvB6Sa1hFSK9wocZ0MMjTn5z4BKblySyOGmK2kcjQ9B4ynY8T0VyHiCM9zPUHlfPjB8V+H3rs7g5N4WeAd8nu9mZz77GDD2g64zJpH1gQxb9Q8ZViPSKlHzUhKP/SvQPpxup7ejnoY3TrC6bTsPIoO1fmIqQSJWtbmRpjOFBaDzp989peWoUP3toHdkJ4T4fy1YMviZlJSCM9TPUl6iyD/GL/DrsqowY8tKief5glfmd0CGRkLjUJwr82f2VpMWEcnPuNIXWtLHt5jxTk7rKWMUwDxS4rRh8TUikir82csdQ+TFkrFPlH/yIEIJPb8zmZF0nBw1sU+gxqfr3Zihv6uajc808uCGbQMc0X7e6EgiO9LsCtxxpBdB+CXoMKvE+6nj2TfE8M2ArBn+QVmBcLkNfu7LHLtxsyPD3rMkkPiKY//qo3JDxvSKtADqroUe/ch6/PnCJwADBfRuypj+5vkTtMAPsr+WULLhGvVbuNWb8uuMQHDWnFbj9BPqD9ELoqoXuCdM8fMul/YCEBZv8PzYQFuzgoY0LePdUIxfM3hNac/rq1AO6b3CE3x2u4raVqSRHTVBe2x3niFLgtuN5etLXKNNohVGKoVh9TnNYgc/df5mZMKDm/yiVe1Wb0cwi/4/t4rNXLyA4MIBf/sn3tYhmheacrzmiy+12F9fS2T/MZ6ZzOoN6Nga7IesqXcae0ziCIGuDMTuGkWFVXmYO+xfAVgz+YbQWjwHmpMq9yr8QFOb/sV0kRoZwz5oMXj5S7ZcY7BkTHg/J+VDxp1nfSkrJM/srWJYSyYYcD6qkVnykXhdeO+ux5wULN0NDqWpq5E9azsFwn60YbHQgNBriF/vfzzDQpcY0yIzkzqPX5jAw7OS5/SZv/ZlznTK/Dc9OgR2vaqe0pnPqukjuXPwIEpdDlO9LlswJFrh8ZpUf+3fc2mPq1VYMNrqQvkaZKPwZtll1AOQILDReMSxJjmLL8iSe2Vfh925UXpFznar5X31oVrd58sNyokICuXvtFOW1NUaG1ASXc92sxpxXZKyFwFD/m5MufgRhcUqJz2FsxeAvcq6FrjpoOuO/MSs/VkX8Mjf4b8wp+MK1i2jpGeRVM1ddXXANiAC4+OGMb3G2oYs9pfU8smkhkSFT1EXSqD0GQz3qGbHxjMAQyFx/2QTnD6SE8g8g5/o57XgGWzH4j0Vb1Gv5+/4bs2Kv2qmETFGGwY9cvTiB/PRofvFROU4/lQ/2mrBYFZ8+C8Xw0/fPEx7s4M835Xh2gTbWAmNCii3LwmuVI7jPT4Uam8+q6MJFN/hnPAOxFYO/iFug4p4v+EkxDPYq05UJzEgaQgi+cO0iLjT18MFZA0J3PSXnOmVKGuzx+tLKlh52Fdfy0MYFxEd42ML84oeQsgoiErweb16zcBMgXSHZfqD8A/W6eIt/xjMQWzH4k0VbVMTLsB86m1UfUoXzTLYKvXN1GmkxofzXhyYOXc25TtXav7TP60t/9sEFAh0BPLrZw93C8IDyBdlmJO/JKFId3XSIIvOI8g8gbqH6mePYisGfLN6ibMmzdGx6ROXHylaeba64+CBHAI9cs5B95S2U1nQYLc7EZG9UHd28NCfVtvfx8tFq7l+fRXL0NAltGtWHlLPbDlP1nqBQl5/BD4phZFg5nhfd4PuxTICtGPzJwmvVZO0PP0PlXlVsLDTG92N5yf0bsokIdpi3TEZwhJpwvFQMT35YjpTwxesXe37RxY/UM6GVebDxjoWbVCmRfh8vMmqOwGCXrRhsfEBYrEo287WfYXhArURNZkbSiAkL4r712bxeUkdVa6/R4kxMznUqG9lDx2ZjVz/PH7zEvWszyYj1Ipmw4iMVEx8WO0NB5zkLNoF0+t7PUP4BIFRE0jxgVopBCBEvhHhHCHHO9Ro3wTlbhBDH3X76hRA7XO/9Sghx0e29uVuuUGPRFqg96ttIipojLvOEeRzP4/nCdTkEBgj+zztnjRZlYnKuUxOOhwlUv/zoIkMjTv7yBi92C4O9UHXQNiPNhsz1quSLr81J5R8oBR7uQRb7HGC2O4ZvAO9JKZcC77n+HoOU8n0pZaGUshC4EegFfu92yte196WUJmiO7GMWb1ETzkUfxl9rST/ZV/tujFmSFhPGI5sW8trxGspqTehryCyCwDCPzEltPYM8t7+SrQXpLEyM8HyMqgMqQGCerEJ9QnC42oX7MtFtoAuqD84bMxLMXjFsB552/f40sGOa8z8J7JFSmtR+4Acy16ua+770M1TsVTV/TL66+dL1S4gODeJ7e04bLcqVBIYoJ7QHiuGpjyvoGRzhy1uWeDfGxQ8hIFCNYzNzFmxSpV8Gunxz/8qPVZTaPAhT1ZitYkiRUtYBuF6naVHF/cDz4449IYQoEUL8QAgRMtmFQojHhBCHhRCHm5qaZie1kTiCVAEwX/kZRoZc5gnzmpE0YsKD+OqNS/joXDN/OmdQ05WpyLlOtXCcolx6V/8Qv9p7kdvyU1mWEuXd/Ss+gvS1pklAtCwLN6vSL5cO+Ob+5R+o8htZ80eBT6sYhBDvCiFKJ/jZ7s1AQog0YBXwttvhbwIrgPVAPPD4ZNdLKZ+UUhZJKYuSkpK8Gdp8LNoCbRehrUL/e9ceVyGxJiic5wmfuXoBGbFhfHfPKfNlQ2smninKLjyzr5LO/mHvdwsDXVBz1M5f0IOsDWrnVekjP0P5B2pXF+RhCPIcYFrFIKW8WUq5coKfnUCDa8LXJv6p0ln/DHhVSjnkdu86qRgAngLMUdTH12hbUl/sGjRbq0UUQ0igg7+5dRlltZ3sKq41WpyxpBVASPSk5qS6jj5+8v55bs5NYVWml2HBlfvUKtcunDd7giPUzssXDuiuerVrXHSD/vc2MbM1Je0CHnb9/jCwc4pzH2CcGclNqQiUf6J0lvJYg8RlEJXuGz9D5V51/0jr7Kq2F2SQlxbNv/3+DAPDJqq86ghUCnYSxfDEG6cYcUq+tTXP+3tXfKiiaezGPPqwcLMqRjiDMiZTUv5H9bpo/vgXYPaK4XvALUKIc8Atrr8RQhQJIX6hnSSEWAhkAX8cd/2vhRAngBNAIvDPs5THGgihdg3lf1QtHfXCOaLiuS2yW9AICBB84/YVVLf18ey+SqPFGUvOddBaDu1VYw7vPd/M6yV1fOmGJWTFh3t/34sfqkAEAxsozSkWblIO4iqd/QzlH6gy26nzq+XqrBSDlLJFSnmTlHKp67XVdfywlPJRt/MqpJQZUkrnuOtvlFKucpmmHpJSmrwpsI4s2gL97fp2dasvgYFOtXqyGNctS+LapYn8x/vn6egbmv4Cf6GZetz8DIPDTv5+ZykLEsL54vUzaAjf1wZ1JbYZSU+yrlIl5vU0J82jMtvjmV//WjOx6Ab1qqefQWuObtHyCo/ftoL23iF+/scLRotymeQ8CE8YY076xZ/KKW/q4dvb8gkNcnh/z8qPAWkntulJSJQqMV+hYz7DPCqzPR5bMRhFZJIqtayV8tWDyr0QlwPR6frd04+szIhhR2E6//2ni9R19P2/9u49PKr6TOD4981NIIhASACTICYEDEUSlgChXAyXjWx1W7VSdOsutFiUui6tuNWqlbWPfVZ3F6H18fpUkK2AYqkl1bpeEBcEEhMCFAIC4ZYGkASEUsIlF377x+9kSSA3Zs5kJnPez/PkmZkzZ07eHznMe87vGuxwrIgI+wW+fy0Yw6GTZ3l+dSm5g3szYVBrvbObsX+t7f6YlOVurF7Xf4wzp5FLw6Q8NM32pTQxBFNqjm0TcKPB7HQFlH4Mabn+HyuI5ubaJRMfWbktdLqvXj8eTh2Cr/bx9Ls7MBie9KXBud7+dbb7Y1Szw3aUL/qPtyPJ3erU4aFpti+liSGYUibYE9mNBc03vQ511TDyB/4fK4iSe3bhiVvSWbu7ksUbDgQ7HMtpC9id/x7vb/+SByemkdTDhwZngNOVUFGi1UiBkHITdEuEgpf9P1Zdjaem2b6UJoZguu7rdqERf9sZaquh8NcwYDL0SnMntiC6J/s6Jqcn8Oz7X4TGPEpxAzBX9+VE8Tuk9Irl3nFtXISnKZt/Yx8HTnEnNnVRZLS9MNq/1i756Y9Dxc40296rRgJNDMEV3dlWKfh767tjFZw+CqPudyeuIBMR/uPODLp3iWbOm1s4Wx3ksQ0i5Pe8jVF1xfznWDsozyc1ZyH/RUidBH2GuBujsobPgOgukP+Sf8fZ+wl2mm1v9hzTxBBsAybZkZX+XOEUvARxA+wXTpjoGRvD/O9kUFpxmqff2xHUWDbsPcbsPVmciYhleNki3w+0+Q2oqoRxD7kXnGqscw/I/AfYtqLFOa5aVF0FRYvsdCUhPhFloGhiCLa/+Se7ytrqp3z7fHmR7Ykx8r6w62s9Li2eWeNTWFpQxoclXwYlhn2Vp5n9RjEJ8fFEZt8PO/KgwofZYOtqYP2vIGlkhxuA2OGMut+2txW+5tvnC16BqgqY8Li7cXUg4fVN0hF17gHj5sKeD31bo6HgZTufT+bd7scWAh7OHcSQxG48svJPHD11rl1/91/O1HDvkiIiI4TXpo/gqjEP2GqKz5678oNtXwl/KbN3CyLuB6su6pUGaTdD0WtQc4XnzNkTsH6h/byHp0PXxBAKRs6yvSk+nmdHW7bVqSNQ8g4Mu8cO8AlDMVER/PKuYZyrucBDK7a0WxfWmroLzF66ifITZ3n1H4fbaS9i42DE92Hb23aajLa6cAE+W2DXyEi7OXBBq4tG/9BW223/7ZV9bsPzdv3oST8LTFwdhCaGUBDdGSY8ZquEdua1/XNFi+z8SB28i2prUuO7Mu/vB7O+9DjzP9qFuZLk6QNjDPPyStiw9zj/fseNZPVvUM88+kGIiLZf9G21+32o/ALG/jjsqvtC1vU32US88cW2X2z99ahttB7ybehzY2DjC3F6loaKjLshPh1W/9zWR7em5pxNDAOnQE8f5uvpYKaNSOY7WUm8sGYv8/JKqAvgncPi9QdYVlDG7JxUvj08qfGbV/eG4dNhy/LLJtZrkjGw7jk7SOprtwckXtUEEciebceM7L907s5mrJsPtec93bZQTxNDqIiIhMnz4Hjpxb7uLSn5HZw5BqPuC3xsIUBEeOaOocwan8J/bzzIg8uLOVfjfjfWNbsqePq9Hdz8td78qzMK+zJf/xf7uOFXrR/wwDo4VGQ/ExnlXqCqdTdOhdj4tnVdPVlmL7SG3QNxqYGPLcRpYgglA6dAv9Hw6TMtT5NhjD3Z42/w1MjMiAjhsW+k88Qt6fxx25fMWPw5p865MxOrMYa3Cst4YGkx6X27sWBaJhERzTQSd0+GjLtg0xJb/dCSdfOha2/I/K4rcaorEN0JsmbC7v+BY6Ut7/vpMyARcFOzi0h6iiaGUCICk5+yg9XyX2x+v7J8O8X2qPs82cPl3nEpLJyWSdGBE0x7JZ8KP3srVZw6x8wlRTyychtDk65h8YwRdIlp5ep+7I/tdCYbn29+n0PFdr6d0Q94alnIkDJipl0QqaCFu4bKXbB1uW2ruyax/WILYX4lBhGZKiIlInJBRJqdKlJEpojILhEpFZFHG2y/XkQKRGSPiLwlIjH+xBMW+o2CG26Fz34JVccvf7/mnO050ak7DJ3W/vGFiNuGJbJoxggOHq/ijpc2UFrh21Ie7/7pMLkL17K+9BhP3jqYZfdmk9CtDV/icakw5E4oXNT03wlst9ZO10DW932KTbmga4KtUtqyDM581fQ+nzxtuyGP1YGH9fyt9NwO3AG80twOIhIJvIBd4a0cKBSRPGPMDuBZYIEx5k0ReRmYCfg5lj0MTHoSdmXDuv+yz//8uV2A5OB6KC+0g3fGzbVr3XrY+IHxLP9BNt97vZDcBf9LzqAEpg5PYlJ6b2KiWr7mOXmmmp+tKuEPWw+Tkdyd+VMzGJDQ9coCGDfXjrD94DG7OFLdedtxoPa8rQrc+S6MfzhsuxJ3GNmzYctSWDgU+g61a3n3zYC+mc7fKQ9uetR2R1YAiBtd/0TkU+BhY0xRE++NBv7NGHOz8/qnzlvPAJVAH2NM7aX7tSQrK8sUFV32q8JL3oOwealtlK6rtvWffTPsqNn+4yDtb+17isMnz/JG/kFWFpdz9NR5enSJ5rZhiUwdnszga7txprqWfZVV7DtWxd6K0+w7VsXGvcc5eaaaOZPSmJ2TSlSkjzfPb3/PdgRoSmwC/HAjxPbyvXDKHbs/hD0fwJGtdvqZ2gbrfXTuCXO2QqduwYuvnYjIJmNMqwuBtEc3iUSgYb++cmAUEAecNMbUNtiuFXz1JjxuqyjiUm0i6DfKVkuoy1zbvTM/mXIDc3MHsW5PJW8XlbM0v4zF6w8QFxvD8arq/99XBJJ6dCYz+Rp+NHkgQxL9/De9/RWY+ISd2TPyKvsYdZV9HhHpyTagkDQw1/4A1NXa1dmObLVtdSk5nkgKV6LVxCAiHwN9mnjrcWPMqjb8jqb+Z5gWtjcXxyxgFkC/fv3a8Gs7uKv7wN3Lgh1FhxIZIeQMSiBnUAInqqpZteUQ2w+f4rqeXUhN6EpKfCz942J9W46zOVEx2r2xo4mMgt6D7Q/hOZWMv1pNDMaYyX7+jnIgucHrJOAwcAzoLiJRzl1D/fbm4ngVeBVsVZKfMakw1yM2hhlj/Fg3QSkPa4/uqoVAmtMDKQa4C8gztnFjDXCns990oC13IEoppQLI3+6qt4tIOTAaeE9EPnC2XysifwRw7gb+GfgA2AmsMMaUOId4BHhIREqxbQ4+zpOrlFLKLa70SmpvnuiVpJRSLmtrryQd+ayUUqoRTQxKKaUa0cSglFKqEU0MSimlGtHEoJRSqpEO2StJRCqBgz5+vBd2cJ3XaLm9xavlBu+WvS3lvs4YE9/agTpkYvCHiBS1pbtWuNFye4tXyw3eLbub5daqJKWUUo1oYlBKKdWIFxPDq8EOIEi03N7i1XKDd8vuWrk918aglFKqZV68Y1BKKdUCTyUGEZkiIrtEpFREHg12PIEiIotEpEJEtjfY1lNEPhKRPc5jj2DGGAgikiwia0Rkp4iUiMgcZ3tYl11EOonI5yKy1Sn3U87260WkwCn3W86092FHRCJFZLOIvOu8Dvtyi8gBEdkmIltEpMjZ5tp57pnEICKRwAvA3wGDgbtFZHBwowqY14Epl2x7FFhtjEkDVjuvw00tMNcYkw5kAw84f+NwL/t5YKIxJgPIBKaISDbwLLDAKfcJYGYQYwykOdgp/et5pdwTjDGZDbqounaeeyYxACOBUmPMPmNMNfAm8K0gxxQQxpi1wFeXbP4WsMR5vgS4rV2DagfGmCPGmGLn+V+xXxaJhHnZjXXaeRnt/BhgIvBbZ3vYlRtARJKAW4BfO68FD5S7Ga6d515KDInAnxu8Lne2eUVvY8wRsF+gQEKQ4wkoEekPDAMK8EDZneqULUAF8BGwFzjpLJQF4Xu+LwR+AlxwXsfhjXIb4EMR2SQis5xtrp3nra75HEakiW3aJSsMiUhXYCXwI2PMKXsRGd6MMXVApoh0B94B0pvarX2jCiwRuRWoMMZsEpGc+s1N7BpW5XaMMcYcFpEE4CMR+cLNg3vpjqEcSG7wOgk4HKRYguGoiPQFcB4rghxPQIhINDYpLDXG/M7Z7ImyAxhjTgKfYttYuotI/cVfOJ7vY4BvisgBbNXwROwdRLiXG2PMYeexAnshMBIXz3MvJYZCIM3psRAD3AXkBTmm9pQHTHeeTwdWBTGWgHDql18DdhpjnmvwVliXXUTinTsFRKQzMBnbvrIGuNPZLezKbYz5qTEmyRjTH/v/+RNjzHcJ83KLSKyIXF3/HMgFtuPiee6pAW4i8g3sFUUksMgY84sghxQQIrIcyMHOtngUmAf8HlgB9APKgKnGmEsbqDs0ERkLrAO2cbHO+TFsO0PYll1EhmIbGyOxF3srjDE/F5EU7JV0T2AzcI8x5nzwIg0cpyrpYWPMreFebqd87zgvo4BlxphfiEgcLp3nnkoMSimlWuelqiSllFJtoIlBKaVUI5oYlFJKNaKJQSmlVCOaGJRSSjWiiUEppVQjmhiUUko1oolBKaVUI/8HVicn8RtTKvAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ts1 = np.sin(np.linspace(1, 10))\n",
    "ts2 = np.sin(2 * np.linspace(1, 10))\n",
    "ts3 = np.zeros((50,)) \n",
    "plt.plot(ts1)\n",
    "plt.plot(ts2)\n",
    "plt.plot(ts3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise: calculate the Euclidean distance between respective pairs of time series from the 3 time series above"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7.3897194681883756"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.sum(np.square(ts1 - ts2)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.999710697636168"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.sum(np.square(ts1 - ts3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.935018175874873"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.sum(np.square(ts2 - ts3)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(50,)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.linspace(1,10).shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Another time series clustering technique that has been recommended is a correlation measure. How does this fair in the case of our sine curves and straigh line?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(215202)\n",
    "ts3_noise = np.random.random(ts3.shape)\n",
    "ts3 = np.zeros((50,)) \n",
    "ts3 = ts3 + ts3_noise"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-0.10087714894729656, 0.485772279067737)"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pearsonr(ts1, ts2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.19217749375608117, 0.18121250150076443)"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pearsonr(ts1, ts3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.1866633643227201, 0.1942984942405358)"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pearsonr(ts2, ts3 + np.random.random(ts3.shape))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise: use what we discussed about dynamic programming to code a DTW function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = words.iloc[:, 1:271].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "def distDTW(ts1, ts2):\n",
    "    DTW       = np.full((len(ts1) + 1, len(ts2) + 1), 0, dtype = np.float32)\n",
    "    DTW[:, 0] = np.inf\n",
    "    DTW[0, :] = np.inf\n",
    "    DTW[0, 0] = 0\n",
    "\n",
    "    for i in range(1, len(ts1) + 1):\n",
    "        for j in range(1, len(ts2) + 1):\n",
    "            idx1 = i - 1 \n",
    "            idx2 = j - 1\n",
    "            \n",
    "            dist               = (ts1[idx1] - ts2[idx2])**2\n",
    "            min_preceding_dist = min(DTW[i-1, j],DTW[i, j-1], DTW[i-1, j-1])\n",
    "\n",
    "            DTW[i, j] = dist + min_preceding_dist\n",
    "\n",
    "    return sqrt(DTW[len(ts1), len(ts2)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise: does this fix the problem above noted with the sine curves vs. a straight line?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.7609101849567645"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "distDTW(ts1, ts2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.999710456093972"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "distDTW(ts1, ts3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.935018374516099"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "distDTW(ts2, ts3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7.777960024318239"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "distDTW(X[0], X[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7.777960164340302"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dtw.distance(X[0], X[1])\n",
    "## worth checking out: https://github.com/wannesm/dtaidistance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "# p = pairwise_distances(X, metric = distDTW)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# with open(\"pairwise_word_distances.npy\", \"wb\") as f:\n",
    "#     np.save(f, p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "p = np.load(\"data/pairwise_word_distances.npy\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise: Try clustering based on dynamic time warping distances"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "## We will use hierarchical clustering as a distance agnostic methodology"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "clustering = AgglomerativeClustering(linkage='average', n_clusters=50, affinity = 'precomputed') \n",
    "## 'average' linkage is good for non Euclidean distance metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = clustering.fit_predict(p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "455"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(words.word)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "455"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(labels)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercise: How did the clustering perform?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8286055510058652\n",
      "0.923840473866547\n"
     ]
    }
   ],
   "source": [
    "\n",
    "print(homogeneity_score(words.word, labels))\n",
    "print(completeness_score(words.word, labels))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [],
   "source": [
    "# quoting: https://scikit-learn.org/stable/modules/clustering.html#homogeneity-completeness\n",
    "# homogeneity: each cluster contains only members of a single class.\n",
    "# completeness: all members of a given class are assigned to the same cluster."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "res = contingency_matrix(labels, words.word)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f8e0d38d828>"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "## note difficulties in assessing this given imbalanced dataset\n",
    "plt.imshow(res)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
